// https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b

#include <iostream>
#include <vector>
using namespace std;

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

class Solution {
private:
    bool valid(const TreeNode* node, const int minValue, const int maxValue) {
        if (node == nullptr) {
            return true;
        }

        return node->val > minValue && node->val < maxValue &&
            valid(node->right, minValue, node->val) &&
                valid(node->left, node->val, maxValue);
    }

public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return bool布尔型
     */
    bool isValidBST(TreeNode* root) {
        return valid(root, LONG_MIN, LONG_MAX);
    }
};

